#ifndef ESTADODEATAQUE_H_
#define ESTADODEATAQUE_H_

#include "SubestadoDeRealizacionDePartida.h"
#include "SubestadoDeAtaque.h"
#include "EstadoDeRealizacionDePartida.h"
#include <list>
#include "Dado.h"
using namespace std;

class EstadoDeAtaque : public SubestadoDeRealizacionDePartida
{
private:
	EstadoDeRealizacionDePartida* realizacionDePartida;
	
	list<Dado*> dadosTiradosPorAtacante;
	list<Dado*> dadosTiradosPorDefensor;
	SubestadoDeAtaque* declaracion;
	SubestadoDeAtaque* tiradaDeDados;
	SubestadoDeAtaque* decisionDelResultado;
	
	SubestadoDeAtaque* estado;
	
	Ataque* ataque;
		
public:
	EstadoDeAtaque(EstadoDeRealizacionDePartida* realizacionDePartida);
	
	void moverEjercitos(Jugador* jugador, Territorio* origen, Territorio* destino, unsigned int cantidadDeEjercitos) {
		this->estado->moverEjercitos(jugador,origen,destino,cantidadDeEjercitos);
	}
	void realizarAtaque(Ataque* ataque) {
		this->estado->realizarAtaque(ataque);	
	}
	void tirarDados(Jugador* jugador, unsigned int cantidadDeDados) {
		this->estado->tirarDados(jugador,cantidadDeDados);
	}
	
	void pasar(Jugador* jugador) {
		this->estado->pasar(jugador);
	}
	
	virtual void decidirResultado() {
		this->estado->decidirResultado();
	}
	
	SubestadoDeAtaque* getEstadoDeDeclaracion() {
		return declaracion;
	}
	SubestadoDeAtaque* getEstadoDeTiradaDeDados() {
		return tiradaDeDados;
	}
	SubestadoDeAtaque* getEstadoDeDecisionDeResultado() {
		return decisionDelResultado;
	}
	
	list<Dado*>* getDadosTiradosPorAtacante() {
		return &dadosTiradosPorAtacante;
	}
	
	list<Dado*>* getDadosTiradosPorDefensor() {
		return &dadosTiradosPorDefensor;
	}
	
	EstadoDeRealizacionDePartida* getEstadoDeRealizacionDePartida() {
		return realizacionDePartida;
	}
	
	void setEstado(SubestadoDeAtaque* estado) {
		this->estado = estado;
	}
	void setAtaque(Ataque* unAtaque) {
		this->ataque = unAtaque;
	}
	Ataque* getAtaque() {
		return ataque;
	}
	
	string toString();
	
	virtual ~EstadoDeAtaque();
};

#endif /*ESTADODEATAQUE_H_*/
